#!/usr/bin/env python3
"""
验证 setup() 函数是否解析命令行参数
"""

import sys
import os

# 模拟不同的命令行调用
test_commands = [
    ['setup.py', '--help'],
    ['setup.py', 'build'],
    ['setup.py', 'build', '--debug'],
    ['setup.py', 'install', '--user'],
    ['setup.py', 'bdist_wheel'],
]

def mock_setup_with_tracking(**kwargs):
    """带跟踪的模拟 setup 函数"""
    
    print(f"\n=== setup() 被调用 ===")
    print(f"传入的 kwargs: {list(kwargs.keys())}")
    print(f"当前 sys.argv: {sys.argv}")
    
    # 模拟 setuptools 的解析过程
    if len(sys.argv) <= 1:
        commands = ['help']  # 默认命令
    else:
        # 解析命令行参数
        commands = []
        options = []
        
        for arg in sys.argv[1:]:
            if arg.startswith('-'):
                options.append(arg)
            else:
                commands.append(arg)
    
    print(f"解析出的命令: {commands}")
    print(f"解析出的选项: {options}")
    
    # 模拟命令执行
    for cmd in commands:
        if cmd == 'help' or cmd == '--help':
            print(f"  -> 执行 help 命令")
            print(f"     显示可用的命令和选项")
        elif cmd == 'build':
            print(f"  -> 执行 build 命令")
            print(f"     编译 C 扩展模块")
            print(f"     使用 ext_modules: {kwargs.get('ext_modules', [])}")
            print(f"     使用 cmdclass: {kwargs.get('cmdclass', {})}")
        elif cmd == 'install':
            print(f"  -> 执行 install 命令")
            print(f"     安装包到系统")
        elif cmd == 'bdist_wheel':
            print(f"  -> 执行 bdist_wheel 命令")  
            print(f"     创建 wheel 包")
        else:
            print(f"  -> 执行 {cmd} 命令")

# 测试不同的命令行参数
for i, cmd_args in enumerate(test_commands, 1):
    print(f"\n{'='*60}")
    print(f"测试 {i}: python {' '.join(cmd_args)}")
    print(f"{'='*60}")
    
    # 设置 sys.argv
    sys.argv = cmd_args
    
    # 调用模拟的 setup 函数
    mock_setup_with_tracking(
        name='my_package',
        version='1.0.0',
        ext_modules=['CMakeExtension(...)'],
        cmdclass={'build_ext': 'CMakeBuild'}
    )

print(f"\n{'='*60}")
print("结论:")
print("✓ setup() 函数确实会解析命令行参数")
print("✓ 解析发生在 setup() 函数内部")  
print("✓ 基于解析结果执行对应的命令")
print("✓ 命令可以访问传入 setup() 的所有参数") 